package com.gpstracking.Servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.gpstracking.BE.Area;
import com.gpstracking.BE.Evento;
import com.gpstracking.BE.Punto;
import com.gpstracking.BL.AreaBL;
import com.gpstracking.BL.EventoBL;
import com.gpstracking.BL.NotificacionBL;

public class ServletEvento extends HttpServlet {
	NotificacionBL notificacionBL = new NotificacionBL();
	EventoBL eventoBL = new EventoBL();

	/**
	 * Constructor of the object.
	 */
	public ServletEvento() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String dias = request.getParameter("dias");//cuantos dias se quieren mostrar en el mapa
		String eventosDesactivados = request.getParameter("eventosDesactivados");//estos son la lista de dispositivos que desactivo
		String idEvento = request.getParameter("idEvento");
		
		PrintWriter out = response.getWriter();
		
		if ( idEvento == null || idEvento.isEmpty() ){
			Object areas = findAll( dias, eventosDesactivados);
			out.println( areas );
		}else{
			Object area = findId( dias, idEvento );
			out.println( area );
		}
		out.flush();
		out.close();	

	}
	
	private Object findId( String dias, String idEvento ){
			Evento evento = eventoBL.findById( Integer.parseInt( idEvento ));
			JSONObject jsonEvento = new JSONObject();
			jsonEvento.put("EventoId",evento.getIdEvento());
			jsonEvento.put("Descripcion",evento.getDescripcion());
			jsonEvento.put("NotificacionNombre",evento.getNotificacionCondicion().getNotificacion().getNombre());
			jsonEvento.put("NotificacionDescripcion",evento.getNotificacionCondicion().getNotificacion().getDescripcion());
			jsonEvento.put("CondicionNombre",evento.getNotificacionCondicion().getCondicion().getNombre());
			jsonEvento.put("CondicionDescripcion",evento.getNotificacionCondicion().getCondicion().getDescripcion());
			jsonEvento.put("DispositivoId",evento.getDispositivo().getIdDispositivo());
			jsonEvento.put("DispositivoNombre",evento.getDispositivo().getNombre());
			jsonEvento.put("EventoDate",evento.getFechaHora());		JSONArray puntos = new JSONArray();
			return jsonEvento;
		}
		
		private Object findAll(String dias, String eventosDesactivados) {
		
		//falta filtrar dispositivos
		//falta agregar esto.. deberia tener en texto toda la informacion que quiero q tenga del dispositivo (como cual fue la ultima notificacion que lanzo.. etc).. puede incluir links a imagenes
		List<Evento> listaEventos = notificacionBL.getNotificacionesActivadas(); //esto bota las areas activas
		JSONArray arrayObj = new JSONArray();
		
		for (Evento evento : listaEventos){
			if (isNotSelected(evento.getIdEvento(),eventosDesactivados)){
				//inicialmente json deberia estar vacio por lo que todos son seleccionados
				JSONObject jsonEvento = new JSONObject();
				jsonEvento.put("EventoId",evento.getIdEvento());
				jsonEvento.put("Descripcion",evento.getDescripcion());
				jsonEvento.put("NotificacionNombre",evento.getNotificacionCondicion().getNotificacion().getNombre());
				jsonEvento.put("NotificacionDescripcion",evento.getNotificacionCondicion().getNotificacion().getDescripcion());
				jsonEvento.put("CondicionNombre",evento.getNotificacionCondicion().getCondicion().getNombre());
				jsonEvento.put("CondicionDescripcion",evento.getNotificacionCondicion().getCondicion().getDescripcion());
				jsonEvento.put("DispositivoId",evento.getDispositivo().getIdDispositivo());
				jsonEvento.put("DispositivoNombre",evento.getDispositivo().getNombre());
				jsonEvento.put("EventoDate",evento.getFechaHora());
				//falta uno que me de el tipo de condicion.. o saco el get de cada tipo y el q no es null es la q es..
				//falta apuntar la posicion!!

				//jsonArea.put("Color",area.getColor());
				/*JSONArray puntos = new JSONArray();
				Set as = area.getPuntos();
				Iterator it = as.iterator();
				while( it.hasNext()){
					Punto p = ( Punto ) it.next(); 
					JSONObject punto= new JSONObject();
					punto.put("Latitud", p.getLatitud());
					punto.put("Longitud", p.getLongitud());
					puntos.add(punto);
				}
				jsonArea.put("Puntos", puntos);*/
				arrayObj.add(jsonEvento);
			}			
		}
		return arrayObj;
	}	

	private boolean isNotSelected(int idEvento, String eventosDesactivados) {
			// TODO Auto-generated method stub
			return true;
		}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the POST method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}
